package com.syq.courierDelivery.common.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * swagger配置类
 */
@Configuration
@EnableSwagger2 //该注解开启Swagger2的自动配置
public class SwaggerConfig {
    /**
     * 配置了Swagger 的Docket的bean实例,扫描接口的位置
     * .apis
     *   RequestHandlerSelectors 配置swagger扫描接口的方式
     *      basePackage() 指定要扫描哪些包
     *      any() 全部都扫描
     *      none() 全部不扫描
     *      withClassAnnotation() 参数：类注解的类对象，表示只扫描有该注解的类下的接口
     *      withMethodAnnotation() 参数：方法注解的类对象，表示只扫描该注解的接口
     * .paths 这里是控制哪些路径的api会被显示出来
     *   PathSelectors 路径扫描接口
     *      ant 配置以xxx 开头的路径
     * @return
     */
    @Bean
    public Docket creatRestApi() {
        // 构造函数传入初始化规范，这是swagger2规范
        return new Docket(DocumentationType.SWAGGER_2)
                //apiInfo： 添加api详情信息，参数为ApiInfo类型的参数，这个参数包含了第二部分的所有信息比如标题、描述、版本之类的，开发中一般都会自定义这些信息
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.syq")) //swagger的搜索的包
                .paths(PathSelectors.any()) //swagger的路径匹配规则
                .build();
    }
    private ApiInfo apiInfo() {
        //创建人信息
        Contact contact = new Contact("Curry","https://www.baidu.com","11@qq.com");
        return new ApiInfoBuilder()
                .title("swagger配置使用测试文档")
                .description("使用swagger进行测试")
                .contact(contact)
                .version("version 1.0")
                .build();
    }

}
